/**
 * Independent time operation tool to facilitate subsequent switch to dayjs
 */
import dayjs from 'dayjs';

/** 默认日期时间格式 */
const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';
/** 默认日期格式 */
const DATE_FORMAT = 'YYYY-MM-DD';

/** 格式化日期时间
 * @param date 日期时间
 * @param [format] 格式类型 默认 'YYYY-MM-DD HH:mm:ss'
 */
export function formatToDateTime(date, format = DATE_TIME_FORMAT) {
  if (date === '' || date === null || date === undefined) {
    return '';
  }
  return dayjs(date).format(format);
}

/** 格式化日期时间
 * @param date 日期时间
 * @param [format] 格式类型 默认 'YYYY-MM-DD'
 */
export function formatToDate(date, format = DATE_FORMAT) {
  if (date === '' || date === null || date === undefined) {
    return '';
  }
  return dayjs(date).format(format);
}

/** 获取日期对应的星期
 * @param date 日期时间
 */
export function getDayOfWeek(date) {
  return dayjs(date).format('dddd'); // 返回星期几的全称
}

/** 计算两个日期时间之间的差异
 * @param start 开始时间
 * @param end 结束时间
 * @param unit 差异单位
 * ```
Unit		Shorthand	Description
day		d		Day
week		w		Week of Year
quarter		Q		Quarter
month		M		Month (January as 0, December as 11)
year		y		Year
hour		h		Hour
minute		m		Minute
second		s		Second
millisecond	ms		Millisecond
 * ```
 * @param float 默认情况下，dayjs#diff会将结果截断到小数点后零位，返回一个整数。如果你想要一个浮点数，请将true作为第三个参数传递。
 * Docs: https://day.js.org/docs/en/display/difference
 */
export function diffBetween(
  start,
  end,
  unit,
  float,
) {
  return dayjs(start).diff(dayjs(end), unit, float);
}
/** 计算两个日期时间之间的差异(天)
 * @param start 开始时间
 * @param end 结束时间
 */
export function daysBetween(start, end) {
  return diffBetween(start, end, 'day'); // 以天为单位计算差异
}

/** 日期时间工具 */
export const dateUtil = dayjs;
